#include<bits/stdc++.h>
using namespace std;
const int NN=1004,MM=1e6+4;
int head[NN],ne[MM],e[MM],w[MM],c[MM],f[NN],d[NN],pre[NN],idx=-1,flow,cost,s,t,minn[NN];
bool st[NN];
void add(int u,int v,int l,int money)
{
    e[++idx]=v;
    ne[idx]=head[u];
    c[idx]=l;
    w[idx]=money;
    head[u]=idx;
    e[++idx]=u;
    ne[idx]=head[v];
    w[idx]=-money;
    head[v]=idx;
}
bool spfa()
{
    memset(d,0x3f,sizeof(d));
    memset(f,0,sizeof(f));
    queue<int>q;
    q.push(s);
    f[s]=1e9;
    d[s]=0;
    st[s]=true;
    while(q.size())
    {
        int u=q.front();
        q.pop();
        st[u]=false;
        for(int i=head[u];~i;i=ne[i])
        {
            int v=e[i];
            if(c[i]&&d[v]>d[u]+w[i])
            {
                f[v]=min(f[u],c[i]);
                d[v]=d[u]+w[i];
                pre[v]=i;
                if(st[v])
                    continue;
                q.push(v);
                st[v]=true;
            }
        }
    }
    return f[t];
}
bool EK()
{
    if(spfa())
    {
        flow+=f[t];
        cost+=f[t]*d[t];
        for(int i=t;i!=s;i=e[pre[i]^1])
        {
            c[pre[i]]-=f[t];
            c[pre[i]^1]+=f[t];
        }
        return true;
    }
    return false;
}
int main()
{
	freopen("journey.in","r",stdin);
	freopen("journey.out","w",stdout);
    memset(head,-1,sizeof(head));
    int n,m,q;
    scanf("%d%d%d",&n,&m,&q);
    t=n*2+1;
    for(int i=1;i<=m;i++)
    {
    	int u,v,w;
    	scanf("%d%d%d",&u,&v,&w);
		add(u,v+n,1e9,w);
		add(u+n,v+n,1e9,w);
	}
	for(int i=1;i<=n;i++)
	{
		add(s,i,1,0);
		add(i+n,t,1,0);
	}
	memset(minn,0x3f,sizeof(minn));
	minn[0]=0;
	for(int i=1;i<=n;i++)
    {
    	if(!EK())
    		break;
    	minn[i]=cost;
	}
	while(q--)
	{
		int x,ans=1e9;
		scanf("%d",&x);
		for(int i=0;i<=n;i++)
			ans=min(ans,(n-i)*x+minn[i]);
		printf("%d\n",ans);
	}
    return 0;
}
